import { IPSDEMapObject } from './ipsdemap-object';
import { IPSDEField } from '../defield/ipsdefield';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEMapField
 */
export interface IPSDEMapField extends IPSDEMapObject {
  /**
   * 目标属性名称
   * @type {string}
   */
  dstFieldName: string;

  /**
   * 目标实体属性
   *
   * @type {IPSDEField}
   */
  getDstPSDEField(): IPSDEField | null;

  /**
   * 目标实体属性
   *
   * @type {IPSDEField}
   */
  get dstPSDEField(): IPSDEField | null;

  /**
   * 目标实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getDstPSDEFieldMust(): IPSDEField;

  /**
   * 表达式
   * @type {string}
   */
  expression: string;

  /**
   * 映射类型
   * @description 值模式 [实体映射属性源值类型] {FIELD：属性等价、 VALUE：直接值到目标属性、 EXPRESSION：计算值到目标属性、 VALUE_SRC：直接值到源属性、 EXPRESSION_SRC：计算值到源属性 }
   * @type {( string | 'FIELD' | 'VALUE' | 'EXPRESSION' | 'VALUE_SRC' | 'EXPRESSION_SRC')}
   */
  mapType: string | 'FIELD' | 'VALUE' | 'EXPRESSION' | 'VALUE_SRC' | 'EXPRESSION_SRC';

  /**
   * 直接值
   * @type {string}
   */
  rawValue: string;

  /**
   * 源属性名称
   * @type {string}
   */
  srcFieldName: string;

  /**
   * 源实体属性
   *
   * @type {IPSDEField}
   */
  getSrcPSDEField(): IPSDEField | null;

  /**
   * 源实体属性
   *
   * @type {IPSDEField}
   */
  get srcPSDEField(): IPSDEField | null;

  /**
   * 源实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getSrcPSDEFieldMust(): IPSDEField;
}
